import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;

public class Periodique extends Document implements Serializable {

	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	private String _issn;	

	// Attributs d'Association
	private HashMap<Integer, Parution> _parutions;
	
	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************

	/**
	 * Constructeur. 
	 * @param issn			numero ISSN du periodique
	 * @param nom			nom du periodique	 
	 */
	public Periodique(String issn, String titre) {
		super(titre);
		this.setIssn(issn);		
		this.setParutions(new HashMap<Integer,Parution>());
		
	} // Fin Constructeur

	// ************************************************************************************************************
	// Méthodes privées
	// ************************************************************************************************************
	
	// ------------------------------------------------------------------------------------------------------------
	// Affecteurs	
	
	/**
	 * setter de l'attribut num d'ISSN.
	 * @param isbn valeur à affecter à l'ISBN de l'ouvrage
	 */
	public void setIssn(String issn) {
		this._issn = issn;
	}

	public void setParutions(HashMap<Integer,Parution> parutions){
		_parutions = parutions;
		
	}	
	
	/**
	 * setter de l'attribut nom.
	 * @param nom valeur à affecter au nom du peridioque
	 */
	public void setNom(String titre){
		super.setTitre(titre);
	}	
	
	public void setParution(Integer num, Parution parution){
		_parutions.put(num, parution);
	}
	
	public void notifierObservateurs() {
		this.setChanged();
		this.notifyObservers();	
	}
	
	// ************************************************************************************************************
	// Traitement
	// ************************************************************************************************************
	public Parution ajouterParution(Integer num){		
		//Creer une nouvelle parution
		Parution parution = new Parution(num,this);
		//lier la parution avec Periodique
		this.setParution(num,parution);
		//Notif ses observateurs du changement
		this.notifierObservateurs();		
		return parution;		
	}	
	
	// ************************************************************************************************************
	// Méthodes publiques
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Accesseurs
	
	/**
	 * Getter de l'ISBN.
	 * @return ISBN de l'ouvrage
	 */
	public String getIssn() {
		return _issn;
	}	
	
	/**
	 * Getter du titre.
	 * @return titre de l'ouvrage
	 */
	public String getNom() {
		return super.getTitre();
	}	
	
	public Parution getParution(Integer idParution) {
		return (Parution) _parutions.get(idParution);
	} // Fin unArticle

	
	public Collection<Parution> getParutions() {
		return _parutions.values();
	}
	
	public HashMap<Integer,Parution> getEnsParution(){
		return _parutions;
	}
	
	public Integer getNbParutions() {
		return _parutions.size();
	}	
	
} // Fin Classe Ouvrage

